package com.itheima.serviceimpl;

import com.alibaba.dubbo.config.annotation.Service;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.itheima.constant.Port;
import com.itheima.dao.CheckGroupDao;
import com.itheima.dao.PortCount;
import com.itheima.entity.PageResult;
import com.itheima.pojo.CheckGroup;
import com.itheima.pojo.CheckItem;
import com.itheima.service.CheckGroupService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
//检查组Service层

@Service(interfaceClass = CheckGroupService.class)
@Transactional
public class CheckGroupServiceimpl implements CheckGroupService {

    @Autowired
    private CheckGroupDao checkGroupDao;

    @Autowired
    private PortCount portCount;

//查询所有检查项
    @Override
    public List<CheckItem> queryCheckItem() {
        List<CheckItem> checkItemList = checkGroupDao.queryCheckItem();
        //记录该接口被调用
        portCount.portCount(Port.QUERT_CHECKITEM);

        return checkItemList;
    }

    //添加检查组
    @Override
    public void add(CheckGroup checkGroup, Integer[] checkitemIds) {
    //添加检查组
        checkGroupDao.add(checkGroup);
        addgroup_item(checkGroup.getId(),checkitemIds);
        //记录该接口被调用(添加检查组)
        portCount.portCount(Port.ADD_CHECKGROUP);
    }

    //检查组中添加检查项
    public void addgroup_item(Integer checkGroupId , Integer[]checkitemIds){

        if(checkitemIds!=null && checkitemIds.length>0) {
            for (Integer checkitemId : checkitemIds) {
                Map<String, Integer> map = new HashMap<>();
                map.put("checkGroupId", checkGroupId);
                map.put("checkitemId", checkitemId);
                checkGroupDao.addGroup_Item(map);
            }
        }
    }



    //查询所有检查组
    @Override
    public PageResult queryAll(Integer currentPage , Integer pageSize , String name) {

        PageHelper.startPage(currentPage,pageSize);

        Page<CheckGroup> checkGroups =  checkGroupDao.queryAll(name);
        //记录该接口被调用
        portCount.portCount(Port.QUERT_CHECKGROUP);

        return new PageResult(checkGroups.getTotal(),checkGroups.getResult());

    }

    //根据ID查询检查组(编辑检查组 => 回显数据)
    @Override
    public CheckGroup queryById(Integer id) {
        CheckGroup checkGroup = checkGroupDao.queryById(id);
        //记录该接口被调用
        portCount.portCount(Port.QUERT_CHECKGROUP);
        return checkGroup;
    }

    //根据检查组ID查询该组中的检查项ID;
    @Override
    public List<Integer> checkitemByIds(Integer id) {
        List<Integer> checkitemIds = checkGroupDao.checkitemByIds(id);
        return checkitemIds;
    }

    //修改编辑检查项
    @Override
    public void update(CheckGroup checkGroup,Integer [] checkitemIds) {
//        修改检查组
        checkGroupDao.update(checkGroup);
//        修改检查组与检查项的关联
        checkGroupDao.deleteCheckGroup_Checkitem(checkGroup.getId());  //先清除该检查组与其他检查项之间的旧关联
        addgroup_item(checkGroup.getId(),checkitemIds);  //在建立该检查组与其他检查项之间的关联
        //记录该接口被调用
        portCount.portCount(Port.UPDATE_CHECKGROUP);

    }

    //根据ID删除检查组
    @Override
    public boolean DeleteById(Integer id) {
//         //先清除该检查组与其他检查项之间的联系
//        checkGroupDao.deleteCheckGroup_Checkitem(id);
//        //在清楚检查组与其他检查套餐之间的联系
//        checkGroupDao.DeleteisSetmeal(id);
//
        //查询该检查组是否与其他检查套餐有关联
       Integer checkgroupCount =  checkGroupDao.queryCheckItemById(id);
        //记录该接口被调用
        portCount.portCount(Port.DELETE_CHECKGROUP);
       if(checkgroupCount<=0){
           //清除检查组与检查项之间的关联
           checkGroupDao.deleteCheckGroup_Checkitem(id);
           //该检查组没有被其他检查套餐引用,
           checkGroupDao.DeleteById(id);
           return true;

       }else {
           //该检查组已经被其他检查套餐引用
           return false;
       }



    }


}
